"""K8s资源类型检测器模块"""

from typing import Dict, Any, Optional, List
import logging

class ResourceDetector:
    """
    K8s资源类型检测器
    用于检测和识别K8s资源的类型
    """
    
    # 支持的K8s资源类型列表
    SUPPORTED_RESOURCES = [
        "Deployment",
        "Service",
        "ConfigMap",
        "Secret",
        "Ingress",
        "StatefulSet",
        "Job",
        "CronJob",
        "DaemonSet",
        "PersistentVolumeClaim"
    ]
    
    def __init__(self, logger: Optional[logging.Logger] = None):
        """
        初始化资源检测器
        
        Args:
            logger: 日志记录器，可选
        """
        self.logger = logger or logging.getLogger(__name__)
    
    def detect_resource_type(self, content: Dict[str, Any]) -> str:
        """
        检测资源类型
        
        Args:
            content: 解析后的K8s资源内容
            
        Returns:
            资源类型字符串
            
        Raises:
            ValueError: 无法识别或不支持的资源类型
        """
        # 如果内容为空
        if not content:
            error_msg = "无法从空内容中识别资源类型"
            self.logger.error(error_msg)
            raise ValueError(error_msg)
        
        # 尝试从kind字段获取资源类型
        resource_type = content.get("kind")
        
        if not resource_type:
            error_msg = "资源内容缺少'kind'字段"
            self.logger.error(error_msg)
            raise ValueError(error_msg)
        
        # 验证是否为支持的资源类型
        if resource_type not in self.SUPPORTED_RESOURCES:
            self.logger.warning(f"不支持的资源类型: {resource_type}")
            
        return resource_type
    
    def get_supported_resources(self) -> List[str]:
        """
        获取所有支持的资源类型列表
        
        Returns:
            支持的资源类型列表
        """
        return self.SUPPORTED_RESOURCES.copy()
    
    def is_resource_supported(self, resource_type: str) -> bool:
        """
        检查资源类型是否受支持
        
        Args:
            resource_type: 待检查的资源类型
            
        Returns:
            是否支持该资源类型
        """
        return resource_type in self.SUPPORTED_RESOURCES
    
    def add_supported_resource(self, resource_type: str) -> None:
        """
        添加支持的资源类型
        
        Args:
            resource_type: 要添加的资源类型
        """
        if resource_type not in self.SUPPORTED_RESOURCES:
            self.SUPPORTED_RESOURCES.append(resource_type)
            self.logger.info(f"已添加对资源类型的支持: {resource_type}")
        else:
            self.logger.debug(f"资源类型已支持: {resource_type}")
